<?php
namespace App\Services;
// +----------------------------------------------------------------------
// | Copyright (c) 2024~至今 迪钰国际旅行社 版权所有.
// +----------------------------------------------------------------------
// | Author: dxf &lt;xiangfei2007@126.com&gt;
// +----------------------------------------------------------------------
// | Date: 2024/8/21 10:17
// +----------------------------------------------------------------------

use App\Models\Config;
use Illuminate\Support\Facades\Redis;

/**
 * 配置项服务
 * @Class ConfigService
 * @Package App\Services
 * @Date 2024/8/21 11:41
 */
class ConfigService
{
    public $redis_key = 'config:list';

    /**
     * 获取所有配置项
     * @return mixed|string
     * Date:    2024/8/21 11:31
     */
    public function getAllConfig()
    {
        $config = Redis::hGetAll($this->redis_key);
        if (!$config) {
            $config = $this->getConfigFromDb();
        }
        return $config;
    }


    /**
     * 批量设置配置项
     * @param array $config_array
     * Date:    2024/8/21 11:35
     */
    public function saveAllConfig(array $config_array){
        Redis::hMSet($this->redis_key,$config_array);
    }

    /**
     *
     *  设置某个配置项
     *  将配置项的键值对存储到Redis中，使用Hash数据类型
     *
     * @param string $slug 配置项的键
     * @param string $value 配置项的值
     * Date:    2024/8/21 10:55
     */
    public function setSlugConfig(string $slug='',string $value=''){
        Redis::hSet($this->redis_key,$slug,$value);
    }


    /**
     * 获取某个配置项
     * @param string $slug
     * Date:    2024/8/21 11:40
     */
    public function getSlugConfig(string $slug){
        Redis::hGet($this->redis_key,$slug);
    }


    /**
     * 删除某个配置项
     * @param string $slug 配置项的键
     * Date:    2024/8/21 10:56
     */
    public function delSlugConfig(string $slug=''){
        Redis::hDel($this->redis_key,$slug);
    }

    /**
     * 判断某个配置项是否存在
     * @param string $slug 配置项的键
     * @return mixed
     * Date:    2024/8/21 11:02
     */
    public function isSlugExist(string $slug=''){
        return Redis::hExists($this->redis_key,$slug);
    }

    /**
     * 判断整个配置项是否存在
     * @return mixed
     * Date:    2024/8/21 11:03
     */
    public function isConfigExist(){
        return Redis::exists($this->redis_key);
    }

    /**
     * 从数据库中获取配置项
     * @return mixed[]
     * Date:    2024/8/21 11:11
     */
    public function getConfigFromDb(): array
    {
        return Config::query()->pluck('value', 'slug')->toArray();
    }
}
